package com.stefanini.pe.bbva.bp.in.controller;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ComponentSystemEvent;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

import com.pe.bbva.utils.Constantes;
import com.stefanini.pe.bbva.bp.in.bo.iface.PerfilamientoBOIface;
import com.stefanini.pe.bbva.bp.in.model.AdministrarBackTestModel;
import com.stefanini.pe.bbva.bp.in.model.LoginModel;
import com.stefanini.pe.bbva.bp.in.security.AuthorizationService;
import com.stefanini.pe.bbva.bp.in.to.Cliente;
import com.stefanini.pe.bbva.bp.in.to.NoCliente;
import com.stefanini.pe.bbva.bp.in.to.UsuarioSesion;
import com.stefanini.pe.bbva.bp.in.utils.SpringApplicationContext;
import com.stefanini.pe.bbva.bp.in.utils.Util;

@Controller(value = "administrarBackTest")
@RequestScoped
public class AdministrarBackTestController extends GenericoController{
	@Autowired
	private PerfilamientoBOIface perfilamientoBOIface;

	private LoginModel loginModel;

	private AdministrarBackTestModel adminBackTestModel;
	private String hiddenText;
	private String mensajeUpdate;
	private Map parametrosReporte;
	
	public void onPageLoad(ComponentSystemEvent event) {
		try {
			AuthorizationService auth = (AuthorizationService)SpringApplicationContext.getBean("authorizationService");
			if (auth.isSessionUserAndContextValide() && !FacesContext.getCurrentInstance().isPostback()) {
				System.out.println("AdministrarBackTestController... is not Postback");
				
				mensajeUpdate="";
				adminBackTestModel = new AdministrarBackTestModel();
				
				LoginController loginContr = (LoginController)getHttpSession().getAttribute("loginController");
				loginModel = loginContr.getLoginModel();
				consultaBackTest();
				this.setMensajeUpdate("");				
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public void consultaBackTest(){		
		try{		
			getAdminBackTestModel().getListaBackTestUSDRPT().clear();
			getAdminBackTestModel().getListaBackTestPENRPT().clear();
			getAdminBackTestModel().getListaBackTestEURRPT().clear();
			getAdminBackTestModel().setListaBackTestPEN(new ArrayList());
			getAdminBackTestModel().setListaBackTestUSD(new ArrayList());
			getAdminBackTestModel().setListaBackTestEUR(new ArrayList());
			perfilamientoBOIface.listarPerfilBackTest(
					getAdminBackTestModel().getListaBackTestPEN(),
					getAdminBackTestModel().getListaBackTestUSD(),
					getAdminBackTestModel().getListaBackTestEUR(),
					getAdminBackTestModel().getListaBackTestPENRPT(),
					getAdminBackTestModel().getListaBackTestUSDRPT(),
					getAdminBackTestModel().getListaBackTestEURRPT()
			);
			FacesContext ctx = FacesContext.getCurrentInstance();
			((HttpSession)ctx.getExternalContext().getSession(true)).setAttribute("listaBackTest_USD", getAdminBackTestModel().getListaBackTestUSDRPT());
			((HttpSession)ctx.getExternalContext().getSession(true)).setAttribute("listaBackTest_PEN", getAdminBackTestModel().getListaBackTestPENRPT());
			((HttpSession)ctx.getExternalContext().getSession(true)).setAttribute("listaBackTest_EUR", getAdminBackTestModel().getListaBackTestEURRPT());
			((HttpSession)ctx.getExternalContext().getSession(true)).setAttribute("backTest_param", this.getParametrosReporte());
		}
		catch(Exception e){
			e.printStackTrace();
		}
	}
	
    public Map getParametrosReporte() {
		parametrosReporte=new HashMap();
		FacesContext ctx = FacesContext.getCurrentInstance();
		
		UsuarioSesion usuarioSesion =(UsuarioSesion)((HttpSession) ctx.getExternalContext().getSession(false)).
			        	getAttribute(Constantes.USUARIO_SESSION);
		Calendar c=Calendar.getInstance();
		
		parametrosReporte.put("p_fecha",new SimpleDateFormat("dd/MM/yyyy").format(new Date()));
		parametrosReporte.put("p_fechaRebalanceo",new SimpleDateFormat("dd/MM/yyyy").format(new Date()));
		
		if(usuarioSesion!=null){
			parametrosReporte.put("p_fechaInformacion",Util.formatDate(usuarioSesion.getFechaInformacion()));
			parametrosReporte.put("p_nombEjecutivo",usuarioSesion.retornaNombreCompleto());
			parametrosReporte.put("p_mailEjecutivo",usuarioSesion.getEmail());
			parametrosReporte.put("p_telfEjecutivo",usuarioSesion.getTelefono());
		}
		
		if(((HttpSession)ctx.getExternalContext().getSession(true)).getAttribute(Constantes.OBJETO_CLIENTE_SESSION)!=null) {
			Cliente oCliente= (Cliente)((HttpSession)ctx.getExternalContext().getSession(true)).getAttribute(Constantes.OBJETO_CLIENTE_SESSION);
			parametrosReporte.put("p_nombCliente",oCliente.getNomtarjeta()==null?oCliente.retornaNombreCompleto():oCliente.getNomtarjeta());
			parametrosReporte.put("p_nombPerfil",oCliente.getNombreperfil());
			parametrosReporte.put("p_tipodoc",oCliente.getTipdoc());
			parametrosReporte.put("p_nrodoc",oCliente.getNrodoc());
		}
		
		if(((HttpSession)ctx.getExternalContext().getSession(true)).getAttribute(Constantes.OBJETO_NO_CLIENTE_SESSION)!=null) {
		   
			NoCliente noCliente= (NoCliente)((HttpSession)ctx.getExternalContext().getSession(true)).getAttribute(Constantes.OBJETO_NO_CLIENTE_SESSION);
			parametrosReporte.put("p_nombNoCliente",noCliente.getNomtarjeta()==null?noCliente.retornaNombreCompleto():noCliente.getNomtarjeta());
			parametrosReporte.put("p_nombPerfilNoCliente",noCliente.getNombreperfil());
			parametrosReporte.put("p_tipoDocNoCliente",noCliente.getDestipdoc());
			parametrosReporte.put("p_nroDocNoCliente",noCliente.getNrodoc());
		
		}
		 
		parametrosReporte.put("REPORT_LOCALE",new java.util.Locale("en") );
		parametrosReporte.put("image_path", (String)((ServletContext)ctx.getExternalContext().getContext()).getRealPath(Constantes.IMAGE_BBVA_REPORT));
		
		return parametrosReporte;
	}
    
	public void grabarAdministracionBackTest(){
		try{
			UsuarioSesion usuarioSesion=loginModel.getUsuarioSesion();
			perfilamientoBOIface.grabarPerfilBackTest(
					getAdminBackTestModel().getListaBackTestPEN(),
					getAdminBackTestModel().getListaBackTestUSD(),
					getAdminBackTestModel().getListaBackTestEUR(),
					usuarioSesion.getCodigoUsuario()
			);
			consultaBackTest();
			this.setMensajeUpdate("Los datos fueron guardados correctamente.");
		}catch(Exception e){
			e.printStackTrace();
		}
	}

	public AdministrarBackTestModel getAdminBackTestModel() {
		return adminBackTestModel;
	}

	public void setAdminBackTestModel(AdministrarBackTestModel adminBackTestModel) {
		this.adminBackTestModel = adminBackTestModel;
	}

	public String getHiddenText() {
		return hiddenText;
	}

	public void setHiddenText(String hiddenText) {
		this.hiddenText = hiddenText;
	}

	public String getMensajeUpdate() {
		return mensajeUpdate;
	}

	public void setMensajeUpdate(String mensajeUpdate) {
		this.mensajeUpdate = mensajeUpdate;
	}
}
